/*
 * Título: gestHora. Aplicación web de gestión de horarios para conservatorios.
 * Alumnos:
 * - Javier Pardo Muñoz. I.T. Informática de Gestión
 * - Antonio Prior Cazorla. I.T. Informática de Gestión
 * Director: Dr. José Raúl Romero Salguero.
 *     
 *  Copyright (C) 2013 Javier Pardo Muñoz / Antonio Prior Cazorla
 *
 *  This program is free software: you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation, either version 3 of the License, or
 *  (at your option) any later version.

 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
package es.uco.gesthora.business;

import com.google.gson.Gson;
import es.uco.gesthora.data.DAO.DAONoticia;
import es.uco.gesthora.interfaz.NoticiaBean;
import java.util.Vector;

/**
 * Maneja la capa lógica de todo lo relacionado con las noticias
 *
 * @author Javier Pardo Muñoz / Antonio Prior Cazorla
 *
 */
public class Noticia {

    private static Noticia instance = new Noticia();
    private NoticiaBean infoNoticia = null;
    private DAONoticia dNoticia = null;

    /**
     * Constructor por defecto de la clase
     */
    private Noticia() {

        infoNoticia = new NoticiaBean();
        dNoticia = DAONoticia.getInstance();

    }

    /**
     * Devuelve una instancia de la clase usando el patrón Singleton
     *
     * @return Instancia de la clase Noticia
     */
    public static Noticia getInstance() {
        return instance;
    }

    /**
     * Realiza las operaciones lógicas necesarias para añadir una nueva noticia
     *
     * @param titular: titular de la noticia
     * @param texto: texto contenido en la noticia
     * @return true si se añade correctamente / false si falla
     */
    public boolean nueva(String titular, String texto) {

        int resultado = 0;

        //Rellena el bean con la información de la noticia
        infoNoticia.setTitular(titular);
        infoNoticia.setTexto(texto);

        //La inserta en la base de datos
        resultado = dNoticia.anadir(infoNoticia);

        if (resultado != 0) {
            return true;
        } else {
            return false;
        }

    }

    /**
     * Lista todas las noticias guardadas en la base de datos devolviendo sus
     * titulares
     *
     * @param portada: parámetro que indica si se van a listar en portada, ya
     * que se necesita un formato distinto en la llamada a SQL
     * @return cadena con formato JSON con toda la información de las noticias
     */
    public String listar(int portada) {

        Vector listado = null;
        String resultado = "";

        //Selecciona todas las noticias de la base de datos
        listado = dNoticia.seleccionarTodo(portada);

        //Convierte el resultado a formato JSON
        if (!listado.isEmpty()) {
            Gson json = new Gson();
            resultado = json.toJson(listado);
        } else {
            resultado = "Vacio";
        }

        return resultado;

    }

    /**
     * Obtiene la información de una noticia
     *
     * @param id: id de la noticia
     * @return cadena con formato JSON que contiene la información de la noticia
     */
    public String obtener(int id) {

        Vector noticia = null;
        String resultado = "";

        //Se busca la noticia en la base de datos
        noticia = dNoticia.seleccionar(id);

        //Se convierte el resultado a JSON
        if (!noticia.isEmpty()) {
            Gson gson = new Gson();
            resultado = gson.toJson(noticia);
        }

        return resultado;

    }

    /**
     * Modifica el contenido de una noticia
     *
     * @param id: id de la noticia
     * @param titular: nuevo titular
     * @param texto: nuevo contenido
     * @return true si se modifica correctamente / false si falla
     */
    public boolean modificar(int id, String titular, String texto) {

        int resultado = 0;

        //Se rellena el bean con la nueva información
        infoNoticia.setID(id);
        infoNoticia.setTitular(titular);
        infoNoticia.setTexto(texto);

        //Se modifica la noticia en la base de datos
        resultado = dNoticia.modificar(infoNoticia);

        if (resultado != 0) {
            return true;
        } else {
            return false;
        }

    }

    /**
     * Elimina una noticia de la base de datos
     *
     * @param id: id de la noticia a eliminar
     * @return true si se elimina correctamente / false si falla
     */
    public boolean eliminar(int id) {

        int resultado = 0;

        resultado = dNoticia.eliminar(id);

        if (resultado != 0) {
            return true;
        } else {
            return false;
        }

    }
}
